/**
 * 
 */
package com.feib.stms.service;

import java.util.List;

import org.springframework.transaction.annotation.Transactional;

import com.feib.stms.model.LabelValue;
import com.feib.stms.model.Role;
import com.feib.stms.model.User;

/**
 * @author Karl Chen
 *
 */
@Transactional(readOnly = true)
public interface RoleService 
{
	/** 根據pk查詢
	 * @param rolePk
	 * @return Role
	 */
	public Role getByRolePk(String rolePk);
	
	/**
	 * 根據PK找到有權限的菜單 PK
	 * @return
	 */
	public List<String> getMenuItemPkByRoleId(String roleId);
	
	/**
	 * 查詢所有的系統功能角色
	 */
	public List<Role> getAllSystemRole();
	
	/**
	 * 列出該功能角色下的所有用戶
	 * @param roleNo
	 * @return
	 */
	public List<User> findAllSelectedRoleUser(String rolePk);
	
	/**
	 * 列出當前GROUP下的所有用戶
	 * @param qryRoleNo
	 * @param userGroup
	 * @return
	 */
	public List<User> findAllSelectedRoleUserByGroupPk(String rolePk, Long userGroupPk);
	
	/**
	 * 列出當前GROUP下的用戶(除以選擇的用戶外)
	 * @param rolePk
	 * @param userGroupPk
	 * @return
	 */
	public List<User> findAllUnSelectedRoleUserByGroupPk(String rolePk, Long userGroupPk);
	
	/**
	 * 新增角色菜單權限
	 * @param menuItemList
	 * @param rolePk
	 * @return
	 */
	@Deprecated
	public int insertRoleMenuItemPk(List<String> menuItemList, Long rolePk);
	
	/**
	 * 新增角色權限
	 * @param userList
	 * @param rolePk
	 * @return
	 */
	@Deprecated
	public int insertRoleUser(List<String> userList, Long rolePk);
	
	/** 新增角色(包括角色，權限，使用者)
	 * @param role
	 * @param tempActionBeans
	 * @param rolePk
	 * @param tempUser
	 * @return
	 */
	@Transactional(readOnly = false)
	public boolean insert(Role role,List<String> tempActionBeans, Long rolePk,List<String> tempUser);
	
	/** 修改角色(包括角色，權限，使用者)
	 * @param role
	 * @param tempActionBeans
	 * @param rolePk
	 * @param tempUser
	 * @return
	 */
	@Transactional(readOnly = false)
	public boolean update(Role role,List<String> tempActionBeans, Long rolePk,List<String> tempUser);
	
	/**
     * 角色類別 Key-Value 格式資料
     * @return
     */
    public List<LabelValue> findLabelValueByGroupPk(String groupPk);
    
    
}
